package com.neu.swc;

import com.neu.swc.beans.OtherBean;
import com.neu.swc.dao.UserDao;
import com.neu.swc.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ApplicationContextTest {
    /**
     * BeanFactory是Spring的早期接口，称为Spring的Bean工厂，ApplicationContext是后期更高级接口，称之为Spring容器。
     * ApplicationContext在BeanFactory基础上对功能进行了扩展，例如；监听功能、国际化功能等。BeanFactory的API更偏向底层，ApplicationContext的API大多是对这些底层的API的封装。
     * Bean创建的主要逻辑和功能都被封装到BeanFactory中，ApplicationContext不仅继承了BeanFactory，而且ApplicationContext内部还维护者BeanFactory的引用，所以ApplicationContext和BeanFactory既有继承关系，又有融合关系。
     * Bean的初始化时机不同，原始BeanFactory是在首次调用getBean时才进行bean的创建，而ApplicationContext则是配置文件加载，容器一创建就将Bean都实例化并初始化好。
     * @param args
     */
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

//        OtherBean bean = context.getBean(OtherBean.class);
//        System.out.println(bean);




//        UserService userService = (UserService) context.getBean("userService");
//        userService.show();




//        Object userService = context.getBean("userService");
//
//        System.out.println(userService);
//
//        Object userDaoFactory = context.getBean("userDaoFactory");
//        System.out.println(userDaoFactory);
//
//        Object userDao2 = context.getBean("userDao2");
//        System.out.println(userDao2);


    }
}
